package org.example.Util;

import org.mindrot.jbcrypt.BCrypt;

public class PasswordUtil {
    // 加密强度因子(10-31之间，默认12)
    private static final int BCRYPT_LOG_ROUNDS = 12;

    /**
     * 加密密码(使用BCrypt)
     * @param rawPassword 原始密码
     * @return BCrypt哈希字符串
     * @throws IllegalArgumentException 如果密码为空
     */
    public static String encryptPassword(String rawPassword) {
        if (rawPassword == null || rawPassword.trim().isEmpty()) {
            throw new IllegalArgumentException("密码不能为空");
        }
        return BCrypt.hashpw(rawPassword.trim(), BCrypt.gensalt(BCRYPT_LOG_ROUNDS));
    }

    /**
     * 验证密码
     * @param rawPassword 原始密码
     * @param hashedPassword 存储的哈希密码
     * @return 是否匹配
     */
    public static boolean verifyPassword(String rawPassword, String hashedPassword) {
        try {
            if (rawPassword == null || hashedPassword == null) {
                return false;
            }

            // 检查是否是BCrypt哈希格式
            if (!hashedPassword.startsWith("$2a$") && !hashedPassword.startsWith("$2b$")) {
                System.err.println("密码哈希格式不正确，不是BCrypt格式: " + hashedPassword);
                return false;
            }

            return BCrypt.checkpw(rawPassword.trim(), hashedPassword);
        } catch (Exception e) {
            System.err.println("密码验证异常: " + e.getMessage());
            return false;
        }
    }
}